module List {

    @Opaque struct Elem {
        Elem* next;
    };
    
    @Opaque struct Desc {
        Elem* first;
        Elem* last;
    };
        
    Void init( Desc* list );
    metaonly Void init_meta( Desc* list );

    Bool empty( Desc* list );
    Ptr get( Desc* list );
    Void put( Desc* list, Elem* elem );

    Void print( Desc* list );

}
